home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / hmcv14_1.zip / SETUPAPI.INC < prev    next >
Text File  |  1995-01-11  |  50KB  |  1,696 lines

  1. '******  Windows API's  ******
  2.  
  3. GLOBAL hSetup AS INTEGER
  4. GLOBAL fFrameInit AS INTEGER
  5. GLOBAL fInstallInit AS INTEGER
  6.  
  7. CONST SM_CXSCREEN = 0
  8. CONST SM_CYSCREEN = 1
  9.  
  10. CONST WF_80x87    = 1024
  11. CONST WF_CPU186   =  128
  12. CONST WF_CPU286   =    2
  13. CONST WF_CPU386   =    4
  14. CONST WF_CPU486   =    8
  15. CONST WF_STANDARD =   16
  16. CONST WF_ENHANCED =   32
  17.  
  18. '' DoMsgBox Flags
  19. CONST MB_OK              = 0
  20. CONST MB_ICONHAND        = 16
  21. CONST MB_ICONEXCLAMATION = 48
  22. CONST MB_ICONASTERISK    = 64
  23. CONST MB_TASKMODAL       = 8192
  24.  
  25.  
  26. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  27. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  28. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  29. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  30. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  31. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  32. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  33.  
  34.  
  35. '****** Setup Constants ******
  36.  
  37. ''Command Option Flags
  38.  
  39. CONST cmoVital       = 1
  40. CONST cmoCopy        = 2
  41. CONST cmoUndo        = 4
  42. CONST cmoRoot        = 8
  43. CONST cmoDecompress  = 16
  44. CONST cmoTimeStamp   = 32
  45. CONST cmoReadOnly    = 64
  46. CONST cmoBackup      = 128
  47. CONST cmoForce       = 256
  48. CONST cmoRemove      = 512
  49. CONST cmoOverwrite   = 1024
  50. CONST cmoAppend      = 2048
  51. CONST cmoPrepend     = 4096
  52. CONST cmoNone        = 0
  53. CONST cmoAll         = 65535
  54.  
  55.  
  56. ''File Exist Modes
  57.  
  58. CONST femExists     = 0
  59. CONST femRead       = 1
  60. CONST femWrite      = 2
  61. CONST femReadWrite  = 3
  62.  
  63.  
  64. ''Read-Only Return Code
  65.  
  66. CONST ynrcNo         = 0
  67. CONST ynrcYes        = 1
  68. CONST ynrcErr1       = 2
  69. CONST ynrcErr2       = 3
  70. CONST ynrcErr3       = 4
  71. CONST ynrcErr4       = 5
  72. CONST ynrcErr5       = 6
  73. CONST ynrcErr6       = 7
  74. CONST ynrcErr7       = 8
  75. CONST ynrcErr8       = 9
  76. CONST ynrcErr9       = 10
  77.  
  78. ''General Return Codes
  79.  
  80. CONST grcOkay       = 0
  81. CONST grcNotOkay    = 1
  82. CONST grcUserQuit   = 48
  83.  
  84. ''Ranges
  85.  
  86. ''CONST cbSymValMax = 8192
  87. CONST cbSymValMax = 512
  88.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  89.     '' but we get Out of String Space wattdrvr error if we alloc
  90.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  91.     '' We should look into using dynamic far alloc instead of
  92.     '' STRING$ for large buffers.
  93.  
  94. ''ON ERROR Error Codes
  95. CONST STFERR      = 1024   ''setup system error
  96. CONST STFQUIT     = 1025   ''user quit
  97.  
  98. CONST scmOff      = 0
  99. CONST scmOnIgnore = 1
  100. CONST scmOnFatal  = 2
  101.  
  102.  
  103. '******  Setup API's  ******
  104.  
  105. '' common
  106.  
  107. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  108. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  109. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  110. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  111. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  112. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  113. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  114. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  115. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  116. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  117. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  118.  
  119.  
  120. ''shell
  121.  
  122. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  123. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  124. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  125. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  126. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  127. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  128. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  129. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  130. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  131. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  132. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  133. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  134. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  135.  
  136.  
  137. ''shell
  138.  
  139. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  140. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  141. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  142.  
  143.  
  144. ''install
  145.  
  146. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  147. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  148. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  149. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  150. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  151. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  152. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  153. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  154. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  155. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  156. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  157. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  158. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  159. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  160. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  161. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  162. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  163. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  164. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  165. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  166. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  167. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  168. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  169. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  170. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  171. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  172. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  173. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  174. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  175. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  176. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  177. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  178. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  179. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  180. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  181. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  182. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  183.  
  184. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  185.  
  186.  
  187. '****** Setup Basic Wrapper Declarations  *******
  188.  
  189. ''shell
  190.  
  191. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  192. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  193. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  194. DECLARE SUB UIPop (n%)
  195. DECLARE SUB UIPopAll
  196. DECLARE SUB SetTitle (sz$)
  197. DECLARE SUB ReadInfFile (szFile$)
  198. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  199. DECLARE SUB RemoveSymbol (szSym$)
  200. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  201. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  202. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  203. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  204. DECLARE SUB AddListItem(szSymbol$, szItem$)
  205. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  206.  
  207. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  208. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  209.  
  210. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  211. DECLARE SUB RestoreCursor (hPrev%)
  212.  
  213. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  214. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  215.  
  216. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  217. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  218. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  219. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  220.  
  221. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  222. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  223. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  224. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  225.  
  226.  
  227. ''install
  228.  
  229. DECLARE SUB CreateDir (szDir$, cmo%)
  230. DECLARE SUB RemoveDir (szDir$, cmo%)
  231. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  232. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  233. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  234. DECLARE SUB CopyFilesInCopyList
  235. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  236. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  237. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  238. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  239. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  240. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  241. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  242. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  243. DECLARE SUB DumpCopyList (szFile$)
  244. DECLARE SUB ClearCopyList
  245. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  246. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  247. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  248. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  249. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  250. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  251. DECLARE SUB InitInstall
  252. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  253. DECLARE SUB AddBlankToBillboardList (lTicks&)
  254. DECLARE SUB ClearBillboardList
  255. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  256. DECLARE SUB CloseLogFile
  257. DECLARE SUB WriteToLogFile (szStr$)
  258. DECLARE SUB SetCopyGaugePosition (x%, y%)
  259. DECLARE SUB SetRestartDir(szDir$)
  260. DECLARE FUNCTION RestartListEmpty AS INTEGER
  261. DECLARE FUNCTION ExitExecRestart AS INTEGER
  262. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  263. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  264. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  265. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  266. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  267.  
  268.  
  269. '' Error Handling
  270.  
  271. '$ifdef DEBUG
  272.  
  273. '' Setup API Errors
  274. CONST saeFail   = 0
  275. CONST saeInit   = 1
  276. CONST saeNYI    = 3
  277. CONST saeArg    = 4    ''must be max sae value
  278.  
  279. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  280. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  281.  
  282. '' chk arg
  283. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  284. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  285. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  286. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  287.  
  288. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  289. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  290.  
  291. '$endif ''DEBUG
  292.  
  293. '' Windows system detect
  294.  
  295. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  296. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  297. DECLARE FUNCTION GetWindowsMode AS INTEGER
  298. DECLARE FUNCTION GetWindowsDir  AS STRING
  299. DECLARE FUNCTION GetWindowsSysDir AS STRING
  300. DECLARE FUNCTION IsWindowsShared AS INTEGER
  301. DECLARE FUNCTION GetScreenWidth AS INTEGER
  302. DECLARE FUNCTION GetScreenHeight AS INTEGER
  303.  
  304.  
  305. '*****************  Setup Basic Wrapper Definitions  *********************
  306. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  307.     fFrameInit = 0
  308.     fInstallInit = 0
  309.  
  310.     IF hSetup > 0 THEN
  311. '$ifdef DEBUG
  312.         StfApiErr saeInit, "InitSetup", szCmdLine$
  313. '$endif ''DEBUG
  314.     END IF
  315.  
  316.     i% = InitFrame(szCmdLine$)
  317.     fFrameInit = 1
  318.  
  319.     InitInstall
  320.     fInstallInit = 1
  321.  
  322.     InitSetup = i%
  323. END FUNCTION
  324.  
  325. '*************************
  326. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  327.     IF hSetup > 0 THEN
  328. '$ifdef DEBUG
  329.         StfApiErr saeInit, "InitFrame", szCmdLine$
  330. '$endif ''DEBUG
  331.     ELSE
  332.         i% = InitializeFrame(szCmdLine$)
  333.         IF i% = -1 THEN
  334.             END   '' NOT an error - Usage (/?) or Command line copy operation
  335.         ELSEIF i% = 0 THEN
  336. '$ifdef DEBUG
  337.             StfApiErr saeFail, "InitFrame", szCmdLine$
  338. '$endif ''DEBUG
  339.             END
  340.         ELSE
  341.             InitFrame = i%
  342.         END IF
  343.     END IF
  344. END FUNCTION
  345.  
  346. '*************************
  347. SUB SetBitmap(szDll$, Bitmap%) STATIC
  348.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  349. '$ifdef DEBUG
  350.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  351. '$endif ''DEBUG
  352.         ERROR STFERR
  353.     END IF
  354. END SUB
  355.  
  356. '*************************
  357. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  358.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  359. '$ifdef DEBUG
  360.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  361. '$endif ''DEBUG
  362.         ERROR STFERR
  363.     END IF
  364. END SUB
  365.  
  366. '************************
  367. SUB SetTitle(sz$) STATIC
  368.     SetWindowText HwndFrame(), sz$
  369. END SUB
  370.  
  371. '************************
  372. SUB ReadInfFile (szFile$) STATIC
  373. '$ifdef DEBUG
  374.     if FValidFATPath(szFile$) = 0 then
  375.         BadArgErr 1, "ReadInfFile", szFile$
  376.     end if
  377.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  378.         StfApiErr saeFail, "ReadInfFile", szFile$
  379. '$else  ''!DEBUG
  380.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  381. '$endif ''!DEBUG
  382.         ERROR STFERR
  383.     END IF
  384. END SUB
  385.  
  386. '************************
  387. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  388. '$ifdef DEBUG
  389.     if szDll$ = "" then
  390.         n% = 1
  391.     elseif szDlgProc$ = "" then
  392.         n% = 3
  393.     else
  394.         n% = 0
  395.     end if
  396.     if n% > 0 then
  397.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  398.     end if
  399. '$endif ''DEBUG
  400.  
  401.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  402. '$ifdef DEBUG
  403.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  404. '$endif ''DEBUG
  405.         ERROR STFERR
  406.     ELSE
  407.         UIStartDlg = GetSymbolValue("DLGEVENT")
  408.     END IF
  409. END FUNCTION
  410.  
  411. '************************
  412. SUB UIPop (n%) STATIC
  413.     IF FKillNDialogs(n%) = 0 THEN
  414. '$ifdef DEBUG
  415.         StfApiErr saeFail, "UIPop", STR$(n%)
  416. '$endif ''DEBUG
  417.         ERROR STFERR
  418.     END IF
  419. END SUB
  420.  
  421. '************************
  422. SUB UIPopAll STATIC
  423.     IF FKillNDialogs(65535) = 0 THEN
  424. '$ifdef DEBUG
  425.         StfApiErr saeFail, "UIPopAll", ""
  426. '$endif ''DEBUG
  427.         ERROR STFERR
  428.     END IF
  429. END SUB
  430.  
  431. '************************
  432. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  433. '$ifdef DEBUG
  434.     if szSymbol$ = "" then
  435.         BadArgErr 1, "GetSymbolValue", szSymbol$
  436.     end if
  437. '$endif ''DEBUG
  438.     szValue$ = string$(cbSymValMax,32)
  439.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  440.     GetSymbolValue = szValue$
  441.     IF Length% >= cbSymValMax THEN
  442.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  443.         ERROR STFERR
  444.     END IF
  445.     IF szSymbol$ = "" THEN
  446.         ERROR STFERR
  447.     END IF
  448.     szValue$ = ""
  449. END FUNCTION
  450.  
  451. '************************
  452. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  453. '$ifdef DEBUG
  454.     if szSymbol$ = "" then
  455.         BadArgErr 1, "GetListLength", szSymbol$
  456.     end if
  457. '$endif ''DEBUG
  458.     GetListLength = UsGetListLength(szSymbol$)
  459.     IF szSymbol$ = "" THEN
  460.         ERROR STFERR
  461.     END IF
  462. END FUNCTION
  463.  
  464. '************************
  465. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  466. '$ifdef DEBUG
  467.     if szListSymbol$ = "" then
  468.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  469.     end if
  470.  
  471.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  472.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  473.     end if
  474. '$endif ''DEBUG
  475.  
  476.     szListItem$ = string$(cbSymValMax,32)
  477.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  478.     GetListItem = szListItem$
  479.     IF Length% >= cbSymValMax THEN
  480.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  481.         ERROR STFERR
  482.     END IF
  483.     IF szListSymbol$ = "" THEN
  484.         ERROR STFERR
  485.     END IF
  486.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  487.         ERROR STFERR
  488.     end if
  489.     szListItem$ = ""
  490. END FUNCTION
  491.  
  492. '************************
  493. SUB AddListItem(szSymbol$, szItem$) STATIC
  494. '$ifdef DEBUG
  495.     if szSymbol$ = "" then
  496.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  497.     end if
  498. '$endif ''DEBUG
  499.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  500. '$ifdef DEBUG
  501.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  502. '$endif ''DEBUG
  503.         ERROR STFERR
  504.     END IF
  505. END SUB
  506.  
  507. '************************
  508. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  509. '$ifdef DEBUG
  510.     if szSymbol$ = "" then
  511.         nArg% = 1
  512.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  513.         nArg% = 2
  514.     else
  515.         nArg% = 0
  516.     end if
  517.     if nArg% > 0 then
  518.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  519.     end if
  520. '$endif ''DEBUG
  521.  
  522.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  523. '$ifdef DEBUG
  524.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  525. '$endif ''DEBUG
  526.         ERROR STFERR
  527.     END IF
  528. END SUB
  529.  
  530. '*************************
  531. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  532. '$ifdef DEBUG
  533.     if szSymbol$ = "" then
  534.         n% = 1
  535.     elseif FValidInfSect(szSect$) = 0 then
  536.         n% = 2
  537.     else
  538.         n% = 0
  539.     end if
  540.     if n% > 0 then
  541.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  542.     end if
  543. '$endif ''DEBUG
  544.  
  545.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  546. '$ifdef DEBUG
  547.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  548. '$endif ''DEBUG
  549.         ERROR STFERR
  550.     END IF
  551. END SUB
  552.  
  553. '************************
  554. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  555. '$ifdef DEBUG
  556.     if szSymbol$ = "" then
  557.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  558.     end if
  559. '$endif ''DEBUG
  560.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  561. '$ifdef DEBUG
  562.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  563. '$endif ''DEBUG
  564.         ERROR STFERR
  565.     END IF
  566. END SUB
  567.  
  568. '************************
  569. SUB RemoveSymbol(szSym$) STATIC
  570. '$ifdef DEBUG
  571.     if szSym$ = "" then
  572.         BadArgErr 1, "RemoveSymbol", szSym$
  573.     end if
  574. '$endif ''DEBUG
  575.     IF FRemoveSymbol(szSym$) = 0 THEN
  576. '$ifdef DEBUG
  577.         StfApiErr saeFail, "RemoveSymbol", szSym$
  578. '$endif ''DEBUG
  579.         ERROR STFERR
  580.     END IF
  581. END SUB
  582.  
  583. '************************
  584. FUNCTION ShowWaitCursor STATIC AS INTEGER
  585.     ShowWaitCursor = HShowWaitCursor
  586. END FUNCTION
  587.  
  588. '************************
  589. SUB RestoreCursor (hPrev%) STATIC
  590.     i% = FRestoreCursor(hPrev%)
  591.     IF i% = 0 THEN
  592. '$ifdef DEBUG
  593.         StfApiErr saeFail, "RestoreCursor", ""
  594. '$endif ''DEBUG
  595.         ERROR STFERR
  596.     END IF
  597. END SUB
  598.  
  599. '************************
  600. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  601.     SetBeepingMode = FSetBeepingMode(mode%)
  602. END FUNCTION
  603.  
  604. '************************
  605. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  606.     SetSilentMode = FSetSilent(mode%)
  607. END FUNCTION
  608.  
  609. '************************
  610. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  611. '$ifdef DEBUG
  612.     if FValidInfSect(szSect$) = 0 then
  613.         n% = 1
  614.     elseif szKey$ = "" then
  615.         n% = 2
  616.     else
  617.         n% = 0
  618.     end if
  619.     if n% > 0 then
  620.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  621.     end if
  622. '$endif ''DEBUG
  623.  
  624.     szBuf$ = string$(128, 32)
  625.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  626.     IF Length% >= 128 THEN
  627.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  628.         ERROR STFERR
  629.     END IF
  630.  
  631.     IF Length% = -1 THEN
  632. '$ifdef DEBUG
  633.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  634. '$endif ''DEBUG
  635.         ERROR STFERR
  636.     END IF
  637.  
  638.     GetSectionKeyDate = szBuf$
  639.     szBuf$ = ""
  640. END FUNCTION
  641.  
  642. '************************
  643. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  644. '$ifdef DEBUG
  645.     if FValidInfSect(szSect$) = 0 then
  646.         n% = 1
  647.     elseif szKey$ = "" then
  648.         n% = 2
  649.     else
  650.         n% = 0
  651.     end if
  652.     if n% > 0 then
  653.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  654.     end if
  655. '$endif ''DEBUG
  656.  
  657.     szBuf$ = string$(128, 32)
  658.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  659.     IF Length% >= 128 THEN
  660.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  661.         ERROR STFERR
  662.     END IF
  663.  
  664.     IF Length% = -1 THEN
  665. '$ifdef DEBUG
  666.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  667. '$endif ''DEBUG
  668.         ERROR STFERR
  669.     END IF
  670.  
  671.     GetSectionKeyFilename = szBuf$
  672.     szBuf$ = ""
  673. END FUNCTION
  674.  
  675. '************************
  676. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  677. '$ifdef DEBUG
  678.     if FValidInfSect(szSect$) = 0 then
  679.         n% = 1
  680.     elseif szKey$ = "" then
  681.         n% = 2
  682.     else
  683.         n% = 0
  684.     end if
  685.     if n% > 0 then
  686.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  687.     end if
  688. '$endif ''DEBUG
  689.  
  690.     szBuf$ = string$(128, 32)
  691.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  692.     IF Length% >= 128 THEN
  693.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  694.         ERROR STFERR
  695.     END IF
  696.  
  697.     IF Length% = -1 THEN
  698. '$ifdef DEBUG
  699.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  700. '$endif ''DEBUG
  701.         ERROR STFERR
  702.     END IF
  703.  
  704.     GetSectionKeySize = VAL(szBuf$)
  705.     szBuf$ = ""
  706. END FUNCTION
  707.  
  708. '************************
  709. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  710. '$ifdef DEBUG
  711.     if FValidInfSect(szSect$) = 0 then
  712.         n% = 1
  713.     elseif szKey$ = "" then
  714.         n% = 2
  715.     else
  716.         n% = 0
  717.     end if
  718.     if n% > 0 then
  719.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  720.     end if
  721. '$endif ''DEBUG
  722.  
  723.     szBuf$ = string$(128, 32)
  724.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  725.     IF Length% >= 128 THEN
  726.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  727.         ERROR STFERR
  728.     END IF
  729.  
  730.     IF Length% = -1 THEN
  731. '$ifdef DEBUG
  732.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  733. '$endif ''DEBUG
  734.         ERROR STFERR
  735.     END IF
  736.  
  737.     GetSectionKeyVersion = szBuf$
  738.     szBuf$ = ""
  739. END FUNCTION
  740.  
  741. '************************
  742. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  743. '$ifdef DEBUG
  744.     if szSym$ = "" then
  745.         n% = 1
  746.     elseif FValidInfSect(szSect$) = 0 then
  747.         n% = 2
  748.     else
  749.         n% = 0
  750.     end if
  751.     if n% > 0 then
  752.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  753.     end if
  754. '$endif ''DEBUG
  755.  
  756.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  757. '$ifdef DEBUG
  758.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  759. '$endif ''DEBUG
  760.         ERROR STFERR
  761.     END IF
  762. END SUB
  763.  
  764. '************************
  765. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  766. '$ifdef DEBUG
  767.     if szSym$ = "" then
  768.         n% = 1
  769.     elseif FValidInfSect(szSect$) = 0 then
  770.         n% = 2
  771.     else
  772.         n% = 0
  773.     end if
  774.     if n% > 0 then
  775.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  776.     end if
  777. '$endif ''DEBUG
  778.  
  779.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  780. '$ifdef DEBUG
  781.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  782. '$endif ''DEBUG
  783.         ERROR STFERR
  784.     END IF
  785. END SUB
  786.  
  787. '************************
  788. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  789. '$ifdef DEBUG
  790.     if szSym$ = "" then
  791.         n% = 1
  792.     elseif FValidInfSect(szSect$) = 0 then
  793.         n% = 2
  794.     else
  795.         n% = 0
  796.     end if
  797.     if n% > 0 then
  798.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  799.     end if
  800. '$endif ''DEBUG
  801.  
  802.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  803. '$ifdef DEBUG
  804.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  805. '$endif ''DEBUG
  806.         ERROR STFERR
  807.     END IF
  808. END SUB
  809.  
  810. '************************
  811. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  812. '$ifdef DEBUG
  813.     if szSym$ = "" then
  814.         n% = 1
  815.     elseif FValidInfSect(szSect$) = 0 then
  816.         n% = 2
  817.     else
  818.         n% = 0
  819.     end if
  820.     if n% > 0 then
  821.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  822.     end if
  823. '$endif ''DEBUG
  824.  
  825.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  826. '$ifdef DEBUG
  827.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  828. '$endif ''DEBUG
  829.         ERROR STFERR
  830.     END IF
  831. END SUB
  832.  
  833. '************************
  834. SUB InitInstall STATIC
  835.     IF hSetup > 0 THEN
  836. '$ifdef DEBUG
  837.         StfApiErr saeInit, "InitInstall", ""
  838. '$endif ''DEBUG
  839.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  840. '$ifdef DEBUG
  841.         StfApiErr saeFail, "InitInstall", ""
  842. '$endif ''DEBUG
  843.         END
  844.     END IF
  845. END SUB
  846.  
  847. '************************
  848. SUB CreateDir (szDir$, cmo%) STATIC
  849. '$ifdef DEBUG
  850.     if FValidFATDir(szDir$) = 0 then
  851.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  852.     end if
  853. '$endif ''DEBUG
  854.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  855. '$ifdef DEBUG
  856.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  857. '$endif ''DEBUG
  858.         ERROR STFERR
  859.     END IF
  860. END SUB
  861.  
  862. '************************
  863. SUB RemoveDir (szDir$, cmo%) STATIC
  864. '$ifdef DEBUG
  865.     if FValidFATDir(szDir$) = 0 then
  866.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  867.     end if
  868. '$endif ''DEBUG
  869.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  870. '$ifdef DEBUG
  871.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  872. '$endif ''DEBUG
  873.         ERROR STFERR
  874.     END IF
  875. END SUB
  876.  
  877. '************************
  878. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  879. '$ifdef DEBUG
  880.     if FValidIniFile(szFile$) = 0 then
  881.         n% = 1
  882.     elseif FValidInfSect(szSect$) = 0 then
  883.         n% = 2
  884.     else
  885.         n% = 0
  886.     end if
  887.     if n% > 0 then
  888.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  889.     end if
  890. '$endif ''DEBUG
  891.  
  892.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  893. '$ifdef DEBUG
  894.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  895. '$endif ''DEBUG
  896.         ERROR STFERR
  897.     END IF
  898. END SUB
  899.  
  900. '************************
  901. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  902. '$ifdef DEBUG
  903.     if FValidIniFile(szFile$) = 0 then
  904.         n% = 1
  905.     elseif FValidInfSect(szSect$) = 0 then
  906.         n% = 2
  907.     else
  908.         n% = 0
  909.     end if
  910.     if n% > 0 then
  911.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  912.     end if
  913. '$endif ''DEBUG
  914.  
  915.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  916. '$ifdef DEBUG
  917.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  918. '$endif ''DEBUG
  919.         ERROR STFERR
  920.     END IF
  921. END SUB
  922.  
  923. '************************
  924. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  925. '$ifdef DEBUG
  926.     if FValidIniFile(szFile$) = 0 then
  927.         n% = 1
  928.     elseif FValidInfSect(szSect$) = 0 then
  929.         n% = 2
  930.     elseif szKey$ = "" then
  931.         n% = 3
  932.     else
  933.         n% = 0
  934.     end if
  935.     if n% > 0 then
  936.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  937.     end if
  938. '$endif ''DEBUG
  939.  
  940.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  941. '$ifdef DEBUG
  942.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  943. '$endif ''DEBUG
  944.         ERROR STFERR
  945.     END IF
  946. END SUB
  947.  
  948. '************************
  949. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  950. '$ifdef DEBUG
  951.     if FValidFATPath(szFile$) = 0 then
  952.         n% = 1
  953.     elseif FValidInfSect(szSect$) = 0 then
  954.         n% = 2
  955.     elseif szKey$ = "" then
  956.         n% = 3
  957.     else
  958.         n% = 0
  959.     end if
  960.     if n% > 0 then
  961.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  962.     end if
  963. '$endif ''DEBUG
  964.  
  965.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  966. '$ifdef DEBUG
  967.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  968. '$endif ''DEBUG
  969.         ERROR STFERR
  970.     END IF
  971. END SUB
  972.  
  973. '************************
  974. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  975. '$ifdef DEBUG
  976.     if szGroup$ = "" or len(szGroup$) > 24 then
  977.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  978.     end if
  979. '$endif ''DEBUG
  980.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  981. '$ifdef DEBUG
  982.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  983. '$endif ''DEBUG
  984.         ERROR STFERR
  985.     END IF
  986. END SUB
  987.  
  988. '************************
  989. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  990. '$ifdef DEBUG
  991.     if szGroup$ = "" or len(szGroup$) > 24 then
  992.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  993.     end if
  994. '$endif ''DEBUG
  995.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  996. '$ifdef DEBUG
  997.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  998. '$endif ''DEBUG
  999.         ERROR STFERR
  1000.     END IF
  1001. END SUB
  1002.  
  1003. '************************
  1004. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1005. '$ifdef DEBUG
  1006.     if FValidInfSect(szSect$) = 0 then
  1007.         n% = 1
  1008.     elseif szKey$ = "" then
  1009.         n% = 2
  1010.     elseif FValidFATDir(szDst$) = 0 then
  1011.         n% = 3
  1012.     else
  1013.         n% = 0
  1014.     end if
  1015.     if n% > 0 then
  1016.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1017.     end if
  1018. '$endif ''DEBUG
  1019.  
  1020.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1021. '$ifdef DEBUG
  1022.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1023. '$endif ''DEBUG
  1024.         ERROR STFERR
  1025.     END IF
  1026. END SUB
  1027.  
  1028. '************************
  1029. SUB DumpCopyList (szFile$) STATIC
  1030. '$ifdef DEBUG
  1031.     if szFile$ = "" then
  1032.         BadArgErr 1, "DumpCopyList", szFile$
  1033.     end if
  1034. '$endif ''DEBUG
  1035.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1036. '$ifdef DEBUG
  1037.         StfApiErr saeFail, "DumpCopyList", szFile$
  1038. '$endif ''DEBUG
  1039.         ERROR STFERR
  1040.     END IF
  1041. END SUB
  1042.  
  1043. '************************
  1044. SUB ClearCopyList STATIC
  1045.     ResetCopyList
  1046. END SUB
  1047.  
  1048. '************************
  1049. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1050.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1051.     IF lNeed& < 0 THEN
  1052. '$ifdef DEBUG
  1053.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1054. '$endif ''DEBUG
  1055.         ERROR STFERR
  1056.     END IF
  1057.     GetCopyListCost = lNeed&
  1058. END FUNCTION
  1059.  
  1060. '************************
  1061. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1062.     szItemNew$ = szItem$
  1063.     IF szOther$ <> "" THEN
  1064.         szItemNew$ = szItem$ + "," + szOther$
  1065.     END IF
  1066. '$ifdef DEBUG
  1067.     if szGroup$ = "" or len(szGroup$) > 24 then
  1068.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1069.     end if
  1070. '$endif ''DEBUG
  1071.  
  1072.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1073. '$ifdef DEBUG
  1074.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1075. '$endif ''DEBUG
  1076.         ERROR STFERR
  1077.     END IF
  1078.     szItemNew$ = ""
  1079. END SUB
  1080.  
  1081. '************************
  1082. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1083. '$ifdef DEBUG
  1084.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1085.         n% = 1
  1086.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1087.         n% = 1
  1088.     elseif szProgHelp$ = "" then
  1089.         n% = 2
  1090.     else
  1091.         n% = 0
  1092.     end if
  1093.     if n% > 0 then
  1094.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1095.     end if
  1096. '$endif ''DEBUG
  1097.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1098. '$ifdef DEBUG
  1099.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1100. '$endif ''DEBUG
  1101.         ERROR STFERR
  1102.     END IF
  1103. END SUB
  1104.  
  1105. '************************
  1106. SUB CopyFilesInCopyList STATIC
  1107.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1108.  
  1109.     IF grc% = grcUserQuit THEN
  1110.         ERROR STFQUIT
  1111.     ELSEIF grc% > 0 THEN
  1112. '$ifdef DEBUG
  1113.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1114. '$endif ''DEBUG
  1115.         ERROR STFERR
  1116.     END IF
  1117. END SUB
  1118.  
  1119. '************************
  1120. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1121. '$ifdef DEBUG
  1122.     if FValidFATPath(szFullPathSrc$) = 0 then
  1123.         n% = 1
  1124.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1125.         n% = 2
  1126.     else
  1127.         n% = 0
  1128.     end if
  1129.     if n% > 0 then
  1130.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1131.     end if
  1132. '$endif ''DEBUG
  1133.  
  1134.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1135. '$ifdef DEBUG
  1136.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1137. '$endif ''DEBUG
  1138.         ERROR STFERR
  1139.     END IF
  1140. END SUB
  1141.  
  1142. '************************
  1143. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1144. '$ifdef DEBUG
  1145.     if FValidFATPath(szFullPathSrc$) = 0 then
  1146.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1147.     end if
  1148. '$endif ''DEBUG
  1149.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1150. '$ifdef DEBUG
  1151.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1152. '$endif ''DEBUG
  1153.         ERROR STFERR
  1154.     END IF
  1155. END SUB
  1156.  
  1157. '************************
  1158. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1159. '$ifdef DEBUG
  1160.     if FValidFATPath(szFullPath$) = 0 then
  1161.         n% = 1
  1162.     elseif szBackup$ = "" then
  1163.         n% = 2
  1164.     else
  1165.         n% = 0
  1166.     end if
  1167.     if n% > 0 then
  1168.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1169.     end if
  1170. '$endif ''DEBUG
  1171.  
  1172.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1173. '$ifdef DEBUG
  1174.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1175. '$endif ''DEBUG
  1176.         ERROR STFERR
  1177.     END IF
  1178. END SUB
  1179.  
  1180. '************************
  1181. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1182. '$ifdef DEBUG
  1183.     if FValidFATPath(szFullPath$) = 0 then
  1184.         n% = 1
  1185.     elseif szBackup$ = "" then
  1186.         n% = 2
  1187.     else
  1188.         n% = 0
  1189.     end if
  1190.     if n% > 0 then
  1191.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1192.     end if
  1193. '$endif ''DEBUG
  1194.  
  1195.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1196. '$ifdef DEBUG
  1197.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1198. '$endif ''DEBUG
  1199.         ERROR STFERR
  1200.     END IF
  1201. END SUB
  1202.  
  1203. '************************
  1204. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1205. '$ifdef DEBUG
  1206.     if FValidInfSect(szSect$) = 0 then
  1207.         n% = 1
  1208.     elseif FValidFATDir(szSrc$) = 0 then
  1209.         n% = 2
  1210.     elseif FValidFATDir(szDest$) = 0 then
  1211.         n% = 3
  1212.     else
  1213.         n% = 0
  1214.     end if
  1215.     if n% > 0 then
  1216.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1217.     end if
  1218. '$endif ''DEBUG
  1219.  
  1220.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1221. '$ifdef DEBUG
  1222.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1223. '$endif ''DEBUG
  1224.         ERROR STFERR
  1225.     END IF
  1226. END SUB
  1227.  
  1228. '************************
  1229. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1230. '$ifdef DEBUG
  1231.     if FValidInfSect(szSect$) = 0 then
  1232.         n% = 1
  1233.     elseif szKey$ = "" then
  1234.         n% = 2
  1235.     elseif FValidFATDir(szSrc$) = 0 then
  1236.         n% = 3
  1237.     elseif FValidFATDir(szDest$) = 0 then
  1238.         n% = 4
  1239.     else
  1240.         n% = 0
  1241.     end if
  1242.     if n% > 0 then
  1243.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1244.     end if
  1245. '$endif ''DEBUG
  1246.  
  1247.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1248. '$ifdef DEBUG
  1249.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1250. '$endif ''DEBUG
  1251.         ERROR STFERR
  1252.     END IF
  1253. END SUB
  1254.  
  1255. '************************
  1256. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1257. '$ifdef DEBUG
  1258.     if FValidInfSect(szSect$) = 0 then
  1259.         n% = 1
  1260.     elseif szKey$ = "" then
  1261.         n% = 2
  1262.     elseif FValidFATDir(szSrc$) = 0 then
  1263.         n% = 3
  1264.     elseif FValidFATPath(szDest$) = 0 then
  1265.         n% = 4
  1266.     else
  1267.         n% = 0
  1268.     end if
  1269.     if n% > 0 then
  1270.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1271.     end if
  1272. '$endif ''DEBUG
  1273.  
  1274.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1275. '$ifdef DEBUG
  1276.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1277. '$endif ''DEBUG
  1278.         ERROR STFERR
  1279.     END IF
  1280. END SUB
  1281.  
  1282. '************************
  1283. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1284. '$ifdef DEBUG
  1285.     if szDll$ = "" then
  1286.         n% = 1
  1287.     elseif idDlg% = 0 then
  1288.         n% = 2
  1289.     elseif szProc$ = "" then
  1290.         n% = 3
  1291.     elseif lTicks& <= 0 then
  1292.         n% = 4
  1293.     else
  1294.         n% = 0
  1295.     end if
  1296.     if n% > 0 then
  1297.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1298.     end if
  1299. '$endif ''DEBUG
  1300.  
  1301.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1302. '$ifdef DEBUG
  1303.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1304. '$endif ''DEBUG
  1305.         ERROR STFERR
  1306.     END IF
  1307. END SUB
  1308.  
  1309. '************************
  1310. SUB AddBlankToBillboardList (lTicks&) STATIC
  1311. '$ifdef DEBUG
  1312.     if lTicks& <= 0 then
  1313.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1314.     end if
  1315. '$endif ''DEBUG
  1316.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1317. '$ifdef DEBUG
  1318.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1319. '$endif ''DEBUG
  1320.         ERROR STFERR
  1321.     END IF
  1322. END SUB
  1323.  
  1324. '************************
  1325. SUB ClearBillboardList STATIC
  1326.     IF FClearBillboardList = 0 THEN
  1327. '$ifdef DEBUG
  1328.         StfApiErr saeFail, "ClearBillboardList", ""
  1329. '$endif ''DEBUG
  1330.         ERROR STFERR
  1331.     END IF
  1332. END SUB
  1333.  
  1334. '************************
  1335. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1336. '$ifdef DEBUG
  1337.     if FValidFATPath(szFile$) = 0 then
  1338.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1339.     end if
  1340. '$endif ''DEBUG
  1341.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1342. '$ifdef DEBUG
  1343.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1344. '$endif ''DEBUG
  1345.         ERROR STFERR
  1346.     END IF
  1347. END SUB
  1348.  
  1349. '************************
  1350. SUB CloseLogFile STATIC
  1351.     IF FCloseLogFile() = 0 THEN
  1352. '$ifdef DEBUG
  1353.         StfApiErr saeFail, "CloseLogFile", ""
  1354. '$endif ''DEBUG
  1355.         ERROR STFERR
  1356.     END IF
  1357. END SUB
  1358.  
  1359. '************************
  1360. SUB WriteToLogFile (szStr$) STATIC
  1361.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1362. '$ifdef DEBUG
  1363.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1364. '$endif ''DEBUG
  1365.         ERROR STFERR
  1366.     END IF
  1367. END SUB
  1368.  
  1369.  
  1370. '************************
  1371. SUB SetCopyGaugePosition (x%, y%) STATIC
  1372.     ProSetPos x%, y%
  1373. END SUB
  1374.  
  1375. '************************
  1376. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1377.     szBuf$ = STRING$(512, 32)
  1378.  
  1379.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1380.     IF wRet% = 0 THEN
  1381.         FindFileUsingFileOpen = szBuf$
  1382.     ELSEIF wRet% = 1 THEN
  1383.         FindFileUsingFileOpen = ""
  1384.     ELSE
  1385. '$ifdef DEBUG
  1386.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1387. '$endif ''DEBUG
  1388.         ERROR STFERR
  1389.     END IF
  1390.  
  1391.     szBuf$ = ""
  1392. END FUNCTION
  1393.  
  1394. '************************
  1395. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1396.     IsDirWritable = FIsDirWritable(szDir$)
  1397. END FUNCTION
  1398.  
  1399. '************************
  1400. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1401. '$ifdef DEBUG
  1402.     if FValidFATDir(szFile$) = 0 then
  1403.         BadArgErr 1, "IsFileWritable", szFile$
  1404.     end if
  1405. '$endif ''DEBUG
  1406.     IsFileWritable = FIsFileWritable(szFile$)
  1407. END FUNCTION
  1408.  
  1409. '************************
  1410. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1411.     IF iField% < 1 THEN
  1412. '$ifdef DEBUG
  1413.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1414. '$endif ''DEBUG
  1415.         ERROR STFERR
  1416.     END IF
  1417.     szStart$ = szLine$
  1418.     IF iField% <> 1 THEN
  1419.         FOR i% = 2 TO iField% STEP 1
  1420.             iNew% = INSTR(szStart$, ",")
  1421.             IF iNew% = 0 THEN
  1422.                 GetNthFieldFromIniString = ""
  1423.                 GOTO _GNFFIS_END
  1424.             END IF
  1425.             szStart$ = MID$(szStart$, (iNew% + 1))
  1426.         NEXT
  1427.     END IF
  1428.  
  1429.     iNew% = INSTR(szStart$, ",")
  1430.     IF iNew% <> 0 THEN
  1431.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1432.     END IF
  1433.  
  1434.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1435.  
  1436. _GNFFIS_END:
  1437.  
  1438. END FUNCTION
  1439.  
  1440. '************************
  1441. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1442.     GetWindowsMajorVersion = GetVersion() MOD 256
  1443. END FUNCTION
  1444.  
  1445. '************************
  1446. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1447.     GetWindowsMinorVersion = GetVersion() / 256
  1448. END FUNCTION
  1449.  
  1450. '************************
  1451. FUNCTION GetWindowsMode STATIC AS INTEGER
  1452.     GetWindowsMode = 0
  1453.     longTmp& = GetWinFlags()
  1454.     IF longTmp& AND WF_STANDARD THEN
  1455.         GetWindowsMode = 1
  1456.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1457.         GetWindowsMode = 2
  1458.     END IF
  1459. END FUNCTION
  1460.  
  1461. '************************
  1462. FUNCTION GetWindowsDir STATIC AS STRING
  1463.     szBuf$ = string$(256, 32)
  1464.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1465.  
  1466.     IF cbBuf% = 0 THEN
  1467.         GetWindowsDir = ""
  1468. '$ifdef DEBUG
  1469.         StfApiErr saeFail, "GetWindowsDir", ""
  1470. '$endif ''DEBUG
  1471.         ERROR STFERR
  1472.     ELSE
  1473.         IF cbBuf% > 255 THEN
  1474.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1475.             ERROR STFERR
  1476.         END IF
  1477.         szBuf$ = RTRIM$(szBuf$)
  1478.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1479.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1480.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1481.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1482.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1483.         END IF
  1484.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1485.             szBuf$ = szBuf$ + "\"
  1486.         END IF
  1487.         GetWindowsDir = szBuf$
  1488.     END IF
  1489.  
  1490.     szBuf$ = ""
  1491. END FUNCTION
  1492.  
  1493. '************************
  1494. FUNCTION GetWindowsSysDir STATIC AS STRING
  1495.     szBuf$ = string$(256, 32)
  1496.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1497.  
  1498.     IF cbBuf% = 0 THEN
  1499. '$ifdef DEBUG
  1500.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1501. '$endif ''DEBUG
  1502.         ERROR STFERR
  1503.     ELSE
  1504.         IF cbBuf% > 255 THEN
  1505.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1506.             ERROR STFERR
  1507.         END IF
  1508.         szBuf$ = RTRIM$(szBuf$)
  1509.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1510.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1511.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1512.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1513.         END IF
  1514.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1515.             szBuf$ = szBuf$ + "\"
  1516.         END IF
  1517.         GetWindowsSysDir = szBuf$
  1518.     END IF
  1519.  
  1520.     szBuf$ = ""
  1521. END FUNCTION
  1522.  
  1523. '************************
  1524. FUNCTION IsWindowsShared STATIC AS INTEGER
  1525.     szWin$ = UCASE$(GetWindowsDir())
  1526.     szSys$ = UCASE$(GetWindowsSysDir())
  1527.  
  1528.     IF len(szWin$) = 0 THEN
  1529. '$ifdef DEBUG
  1530.         StfApiErr saeFail, "IsWindowsShared", ""
  1531. '$endif ''DEBUG
  1532.         ERROR STFERR
  1533.     END IF
  1534.  
  1535.     IF len(szSys$) <= len(szWin$) THEN
  1536.         IsWindowsShared = 1
  1537.     ELSE
  1538.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1539.         IF szWin$ = szSys$ THEN
  1540.             IsWindowsShared = 0
  1541.         ELSE
  1542.             IsWindowsShared = 1
  1543.         END IF
  1544.     END IF
  1545. END FUNCTION
  1546.  
  1547. '************************
  1548. FUNCTION GetScreenWidth STATIC AS INTEGER
  1549.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1550. END FUNCTION
  1551.  
  1552. '************************
  1553. FUNCTION GetScreenHeight STATIC AS INTEGER
  1554.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1555. END FUNCTION
  1556.  
  1557. '************************
  1558. SUB SetRestartDir (szDir$) STATIC
  1559. '$ifdef DEBUG
  1560.     if FValidFATDir(szDir$) = 0 then
  1561.         BadArgErr 1, "SetRestartDir", szDir$
  1562.     end if
  1563. '$endif ''DEBUG
  1564.     IF FSetRestartDir(szDir$) = 0 THEN
  1565. '$ifdef DEBUG
  1566.         StfApiErr saeFail, "SetRestartDir", szDir$
  1567. '$endif ''DEBUG
  1568.         ERROR STFERR
  1569.     END IF
  1570. END SUB
  1571.  
  1572. '************************
  1573. FUNCTION RestartListEmpty STATIC AS INTEGER
  1574.     IF FRestartListEmpty() = 0 THEN
  1575.         RestartListEmpty = 0
  1576.     ELSE
  1577.         RestartListEmpty = 1
  1578.     END IF
  1579. END FUNCTION
  1580.  
  1581. '************************
  1582. FUNCTION ExitExecRestart STATIC AS INTEGER
  1583.     ExitExecRestart = FExitExecRestart
  1584. END FUNCTION
  1585.  
  1586. '************************
  1587. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1588.  
  1589. '$ifdef DEBUG
  1590.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1591.         n% = 1
  1592.     elseif FValidFATPath(szDst$) = 0 then
  1593.         n% = 2
  1594.     elseif FValidFATDir(szDir$) = 0 then
  1595.         n% = 3
  1596.     else
  1597.         n% = 0
  1598.     end if
  1599.     if n% > 0 then
  1600.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1601.     end if
  1602. '$endif ''DEBUG
  1603.  
  1604.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1605. '$ifdef DEBUG
  1606.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1607. '$endif ''DEBUG
  1608.         ERROR STFERR
  1609.     END IF
  1610. END SUB
  1611.  
  1612. '***************************  Error Handlers  *****************************
  1613.  
  1614. '$ifdef DEBUG
  1615. '*************************
  1616. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1617.     select case nMsg%
  1618.         case saeFail
  1619.             lpText$ = "Failed"
  1620.         case saeInit
  1621.             lpText$ = "Already Initialized"
  1622.         case saeNYI
  1623.             lpText$ = "NYI"
  1624.         case else
  1625.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1626.     end select
  1627.  
  1628.     lpText$ = lpText$ + ": "+ szApi$
  1629.     if szArgs$ <> "" then
  1630.         lpText$ = lpText + " (" + szArgs$ + ")"
  1631.     end if
  1632.     lpCaption$ = "MS-Setup Toolkit API Error"
  1633.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1634.     print lpText$
  1635.     lpText$ = ""
  1636.     lpCaption$ = ""
  1637. END SUB
  1638.  
  1639. '*************************
  1640. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1641.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1642.     ERROR STFERR
  1643. END SUB
  1644.  
  1645. '*************************
  1646. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1647.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1648.         FValidInfSect = 0
  1649.     else
  1650.         FValidInfSect = 1
  1651.     end if
  1652. END FUNCTION
  1653.  
  1654. '*************************
  1655. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1656. '**    if (FValidFATPath(szFile$) = 0) AND ((UCASE$(szFile$) <> "WIN.INI") OR (UCASE$(szFile$) <> "SYSTEM.INI")) then
  1657.     if (FValidFATPath(szFile$) = 0) then
  1658.         FValidIniFile = 0
  1659.     else
  1660.         FValidIniFile = 1
  1661.     end if
  1662. END FUNCTION
  1663.  
  1664. '*************************
  1665. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1666.  
  1667.     if szDrive$ = "" then
  1668.         FValidDrive = 0
  1669.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1670.         FValidDrive = 1
  1671.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1672.         FValidDrive = 0
  1673.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1674.         FValidDrive = 0
  1675.     elseif LEN(szDrive$) = 1 then
  1676.         FValidDrive = 1
  1677.     elseif INSTR(2,szDrive$,":\") = 2 then
  1678.         FValidDrive = 1
  1679.     elseif INSTR(1,szDrive$,":") = 2 then
  1680.         FValidDrive = 1
  1681.     else
  1682.         FValidDrive = 0
  1683.     end if
  1684. END FUNCTION
  1685.  
  1686. '$endif ''DEBUG
  1687.  
  1688.  
  1689. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1690.  
  1691. End Trap
  1692.  
  1693. hSetup = InitSetup(COMMAND$)
  1694.  
  1695. ON ERROR GOTO QUIT
  1696.